/**
 * 小程序密码验证工具类
 */

import { setStorage, getStorage } from './storage';
import { STORAGE_KEYS, EXPIRE_TIMES } from './storageKeys';

/**
 * 密码密文（9527的简单加密）
 */
const ENCRYPTED_PASSWORD = 'OTUyNw=='; // Base64编码的9527

/**
 * 验证状态存储键
 */
const AUTH_STATUS_KEY = 'AUTH_STATUS';

/**
 * 验证有效期（7天）
 */
const AUTH_EXPIRE_TIME = 7 * 24 * 60 * 60 * 1000; // 7天的毫秒数

/**
 * 简单加密函数（Base64编码）
 * @param text 要加密的文本
 * @returns 加密后的文本
 */
const encrypt = (text: string): string => {
  try {
    // 使用小程序的Base64编码API
    return uni.arrayBufferToBase64(new TextEncoder().encode(text));
  } catch (e) {
    console.error('Base64编码失败:', e);
    // 如果小程序API不可用，使用简单的字符串比较
    return text;
  }
};

/**
 * 验证密码
 * @param password 用户输入的密码
 * @returns 是否验证通过
 */
export const verifyPassword = (password: string): boolean => {
  console.log('验证密码输入:', password);
  const encryptedInput = encrypt(password);
  console.log('加密后的输入:', encryptedInput);
  console.log('期望的密码:', ENCRYPTED_PASSWORD);
  
  // 临时添加直接字符串比较作为备选方案
  const directMatch = password === '9527';
  const encryptedMatch = encryptedInput === ENCRYPTED_PASSWORD;
  
  console.log('直接比较结果:', directMatch);
  console.log('加密比较结果:', encryptedMatch);
  
  return directMatch || encryptedMatch;
};

/**
 * 标记用户已通过验证
 */
export const markUserAuthenticated = (): void => {
  const authData = {
    authenticated: true,
    timestamp: Date.now()
  };
  setStorage(AUTH_STATUS_KEY, authData, AUTH_EXPIRE_TIME);
};

/**
 * 检查用户是否已通过验证且在有效期内
 * @returns 是否已验证且有效
 */
export const isUserAuthenticated = (): boolean => {
  try {
    const authData = getStorage(AUTH_STATUS_KEY);
    if (!authData || !authData.authenticated) {
      return false;
    }
    
    // 检查是否在7天有效期内
    const currentTime = Date.now();
    const timeDiff = currentTime - authData.timestamp;
    
    if (timeDiff > AUTH_EXPIRE_TIME) {
      // 超过7天，清除验证状态
      clearAuthentication();
      return false;
    }
    
    return true;
  } catch (error) {
    console.error('检查验证状态失败:', error);
    return false;
  }
};

/**
 * 清除验证状态
 */
export const clearAuthentication = (): void => {
  try {
    uni.removeStorageSync(AUTH_STATUS_KEY);
  } catch (error) {
    console.error('清除验证状态失败:', error);
  }
};
